/*
 * @Author: xvrui && 3505897045@qq.com
 * @Date: 2024-07-02 12:43:37
 * @LastEditors: RayX 3505897045@qq.com
 * @LastEditTime: 2024-07-06 10:20:34
 * @FilePath: /ns-3.26/src/ipsecinhitipv4/helper/ipsecinhitipv4-helper.h
 * @Description: 
 * 
 */
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
#ifndef IPSECINHITIPV4_HELPER_H
#define IPSECINHITIPV4_HELPER_H

#include "ipsecinhitipv4-helper.h"
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-stack-helper.h"

using namespace ns3;

namespace ns3{
    /* follow the InternetStackHelper
    // public PcapHelperForIpv4, public PcapHelperForIpv6, 
                            public AsciiTraceHelperForIpv4, public AsciiTraceHelperForIpv6
    */  
    // class IpSecInhit:Ipv4Helper : public PcapHelperForIpv4, public AsciiTraceHelperForIpv4
    class IpSecInhitIpv4Helper : private InternetStackHelper
    {
        public:
            IpSecInhitIpv4Helper(); // constructor
            ~IpSecInhitIpv4Helper(); // deconstructor

            /**
             * @description: 这个函数不会修改其所属对象的状态,也不会调用任何非const成员函数
             * @param {NodeContainer} &nodes
             * @return {*}
             */            
            void InstallIpSec(NodeContainer &nodes) const; 
            void Install(NodeContainer &nodes) const;
            void Install(Ptr<Node> node) const;
        private:
            
            void CreateAndAggregateObjectFromTypeId (Ptr<Node> node, const std::string typeId) const;


    };
}


#endif /* IPSECINHITIPV4_HELPER_H */

